package com.lcredu.seckill.exception;

import com.lcredu.seckill.util.response.RespBean;
import com.lcredu.seckill.util.response.RespBeanEnum;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author 黎长容
 * @date 2025-08-24 17:56
 */
@RestControllerAdvice
public class GlobalExceptionHandler {
    //处理所有的异常
    /**
     * 全局异常处理器
     * 处理系统中抛出的各种异常，根据不同类型的异常返回相应的错误响应
     * 
     * @param e 捕获到的异常对象
     * @return 返回封装的错误响应对象
     */
    @ExceptionHandler(Exception.class)
    public RespBean ExceptionHandler(Exception e) {
        //如果是全局异常,则正常处理
        if (e instanceof GlobalException) {
            GlobalException exception = (GlobalException) e;
            return RespBean.error(exception.getRespBeanEnum());
        } else if (e instanceof BindException) {
            //处理参数绑定异常，提取具体的错误信息
            BindException exception = (BindException) e;
            RespBean respBean = RespBean.error(RespBeanEnum.BING_ERROR);
            respBean.setMessage("参数校验异常:" + exception.getBindingResult().getAllErrors().get(0).getDefaultMessage());
            return respBean;
        }
        //如果是绑定异常,打印自定义异常信息
        return RespBean.error(RespBeanEnum.ERROR);
    }

}
